
#ifndef GOMOKU_CORE_IGUI_H__
# define GOMOKU_CORE_IGUI_H__

# include <gomoku/core/Gomoku.h>

namespace gomoku
{
    // forward declaration
    class IReferee;

    class IGui
    {
    public:
        virtual void connectReferee(IReferee *) = 0;
        virtual float restartClock() = 0; // get elapsed time and restart clock.
        virtual void pollEvent() = 0;
        virtual void update(float) = 0;
        virtual void render() = 0; // clear, draw all items, display.

        // STATE title screen : rendering menu for config a match.
        virtual Match matchConfig() = 0;

        // STATE game
        virtual void switchPlayer(Color) = 0;
        // if a Move from think is check true by referee.
        virtual void updateGoban(Move const &) = 0;
        // this fun is call if a player is a CPU.
        virtual Move think(Color) = 0;
    };
}

#endif  // GOMOKU_CORE_IGUI_H__
